#!/bin/bash
# cpu-scheduler DEB包自动打包脚本
# 使用方法：在项目根目录下运行此脚本
set -e

PROJECT_ROOT=$(cd "$(dirname "$0")" && pwd)
DEB_DIR="$PROJECT_ROOT/app.cpu-scheduler-pro/debian"
PKG_NAME="cpu-scheduler"
VERSION_FILE="$PROJECT_ROOT/cpu_scheduler_version.txt"
ARCH="all"

# 检查并创建版本文件（如果不存在）
if [ ! -f "$VERSION_FILE" ]; then
    echo "1.0.0" > "$VERSION_FILE"
fi

# 读取当前版本
CURRENT_VERSION=$(cat "$VERSION_FILE")

# 解析版本号
VERSION_PARTS=(${CURRENT_VERSION//./ })
MAJOR=${VERSION_PARTS[0]}
MINOR=${VERSION_PARTS[1]}
PATCH=${VERSION_PARTS[2]}

# 检查版本号中是否包含4或7，如果包含则将其位置的数字加1
NEW_PATCH=$(( $PATCH + 1 ))
while [[ $NEW_PATCH == *4* ]] || [[ $NEW_PATCH == *7* ]]; do
    # 将版本号转换为数组，逐位检查
    PATCH_ARRAY=($(echo $NEW_PATCH | grep -o .))
    MODIFIED=false
    
    # 从左到右查找第一个4或7并加1
    for i in "${!PATCH_ARRAY[@]}"; do
        if [[ "${PATCH_ARRAY[$i]}" == "4" ]] || [[ "${PATCH_ARRAY[$i]}" == "7" ]]; then
            PATCH_ARRAY[$i]=$((${PATCH_ARRAY[$i]} + 1))
            MODIFIED=true
            break
        fi
    done
    
    # 如果找到了4或7并修改了，重新组合版本号
    if [ "$MODIFIED" = true ]; then
        NEW_PATCH=""
        for digit in "${PATCH_ARRAY[@]}"; do
            NEW_PATCH="${NEW_PATCH}${digit}"
        done
    else
        # 如果没有找到4或7，则在末尾加1
        NEW_PATCH=$((NEW_PATCH + 1))
    fi
done

# 更新补丁版本号
PATCH=$NEW_PATCH


# 构建新版本号
NEW_VERSION="$MAJOR.$MINOR.$PATCH"

# 保存新版本号到文件
echo "$NEW_VERSION" > "$VERSION_FILE"

# 设置deb包输出路径
OUTPUT_DEB="$PROJECT_ROOT/${PKG_NAME}_${NEW_VERSION}_${ARCH}.deb"

# 检查必要目录
if [ ! -d "$DEB_DIR/DEBIAN" ]; then
  echo "缺少DEBIAN目录，请检查项目结构。"
  exit 1
fi

# 更新control文件中的版本号，并确保文件末尾有换行符
sed -i "s/^Version:.*/Version: $NEW_VERSION/" "$DEB_DIR/DEBIAN/control"
# 确保control文件末尾有空行
echo "" >> "$DEB_DIR/DEBIAN/control"

# 新增：更新代码中的硬编码版本号
# 更新 main.py 中的版本号
sed -i "s/version = \"[0-9]*\.[0-9]*\.[0-9]*\"/version = \"$NEW_VERSION\"/" "$DEB_DIR/usr/share/cpu-scheduler-pro/main.py"

# 更新 cpu_scheduler_gui.py 中的版本号
sed -i "s/self.version = \"[0-9]*\.[0-9]*\.[0-9]*\"/self.version = \"$NEW_VERSION\"/" "$DEB_DIR/usr/share/cpu-scheduler-pro/gui/cpu_scheduler_gui.py"
sed -i "s/return \"[0-9]*\.[0-9]*\.[0-9]*\"/return \"$NEW_VERSION\"/" "$DEB_DIR/usr/share/cpu-scheduler-pro/gui/cpu_scheduler_gui.py"

# 更新窗口标题中的版本号
sed -i "s/CPU频率调度器 v[0-9]*\.[0-9]*\.[0-9]*/CPU频率调度器 v$NEW_VERSION/" "$DEB_DIR/usr/share/cpu-scheduler-pro/gui/cpu_scheduler_gui.py"

sed -i "s/^- \*\*版本:\*\* .*/- \*\*版本:\*\* v$NEW_VERSION/" "$DEB_DIR/usr/share/cpu-scheduler-pro/help.md"

echo "正在构建 $PKG_NAME 版本 $NEW_VERSION..."

# 清理旧的构建目录（如果存在）
if [ -d "debian/$PKG_NAME" ]; then
    rm -rf "debian/$PKG_NAME"
fi

# 构建deb包
dpkg-deb --build "$DEB_DIR" "$OUTPUT_DEB"

if [ $? -eq 0 ]; then
  echo "DEB包已生成：$OUTPUT_DEB"
  echo "版本已更新为：$NEW_VERSION"
else
  echo "打包失败，请检查错误信息。"
  # 恢复版本号
  echo "$CURRENT_VERSION" > "$VERSION_FILE"
  exit 1
fi

# 构建deb包
cd "$CURRENT_DIR" || exit 1
